package class_object;

public class ParameterPassing {
    // 基本类型参数（值传递）
    public static void changeInt(int num) {
        num = 100;
        System.out.println("方法内：" + num);
    }

    // 引用类型参数（传递引用的副本）
    public static void changeArray(int[] arr) {
        if (arr != null) {
            arr[0] = 100; // 修改引用指向的对象内容
            System.out.println("方法内数组第一个元素：" + arr[0]);
        }
        arr = new int[5]; // 改变副本引用，不影响原引用
        arr[0] = 200;
    }

    // 自定义对象参数
    static class Person {
        String name;

        Person(String name) {
            this.name = name;
        }
    }

    public static void changePerson(Person p) {
        p.name = "李四"; // 修改对象内容
        p = new Person("王五"); // 改变副本引用
    }

    public static void main(String[] args) {
        // 1. 基本类型传参
        int num = 10;
        System.out.println("基本类型-调用前：" + num);
        changeInt(num);
        System.out.println("基本类型-调用后：" + num); // 仍为10

        // 2. 数组传参
        int[] arr = {10, 20, 30};
        System.out.println("\n数组-调用前第一个元素：" + arr[0]);
        changeArray(arr);
        System.out.println("数组-调用后第一个元素：" + arr[0]); // 变为100

        // 3. 对象传参
        Person p = new Person("张三");
        System.out.println("\n对象-调用前姓名：" + p.name);
        changePerson(p);
        System.out.println("对象-调用后姓名：" + p.name); // 变为李四
    }
}
